/**
 * Project Name:JavaBaseReview
 * Package Name:com.xuwei.base.graph
 * author:David
 * Date:2016年5月15日上午9:38:12
 * Copyright (c) 2016, xw123box@126.com All Rights Reserved.
 *
 */
package com.xuwei.base.graph;

/**
 * @author David
 * @since 2016年5月15日 上午9:38:12
 * @version 
 * @since JDK 1.6
 */
public class Path {
	/**
	 * 起点与终点的距离
	 */
	private int distance;
	/**
	 * 起点信息
	 */
	private Vertex start;
	/**
	 * 终点信息
	 */
	private Vertex end;
	/**
	 * 起点到终点途径的顶点序列
	 */
	private LinkList pathInfo;
	
	
	/**
	 * 构造方法
	 */
	public Path() {
		this(Integer.MAX_VALUE, null, null);
	}

	public Path(int distance, Vertex start, Vertex end) {
		this.distance = distance;
		this.start = start;
		this.end = end;
		pathInfo = new LinkListDLNode();
	}
	
	/**
	 * 判断起点与终点之间是否存在路径
	 * @return
	 */
	public boolean hasPath(){
		return distance!=Integer.MAX_VALUE&&start!=null&&end!=null;
	}
	
	/**
	 * 求路径长度
	 * @return
	 */
	public int pathLength(){
		if(!hasPath()){
			return -1;
		}else if(start==end){
			return 0;
		}else{
			return pathInfo.getSize()+1;
		}
	}

	public int getDistance() {
		return distance;
	}

	public void setDistance(int distance) {
		this.distance = distance;
	}

	public Vertex getStart() {
		return start;
	}

	public void setStart(Vertex start) {
		this.start = start;
	}

	public Vertex getEnd() {
		return end;
	}

	public void setEnd(Vertex end) {
		this.end = end;
	}
	
	/**
	 * 清空路径信息
	 */
	public void clearPathInfo(){
		pathInfo = new LinkListDLNode();
	}
	
	/**
	 * 添加路径信息
	 * @param info
	 */
	public void addPathInfo(Object info){
		pathInfo.insertLast(info);
	}

	public LinkList getPathInfo() {
		return pathInfo;
	}
	
	
}
